Skip to content

feat: today 대시보드 핵심 API (GET /dashboard/today) - #114

Merged
chaeliki merged 8 commits into
mainfrom
feat/15-dashboard-today-core
Aug 8, 2026
Merged

feat: today 대시보드 핵심 API (GET /dashboard/today)#114
chaeliki merged 8 commits into
mainfrom
feat/15-dashboard-today-core

Conversation

@chaeliki

@chaeliki chaeliki commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

왜 필요한가요?

Refs #15

HR이 로그인 직후 오늘 처리할 업무를 한 화면에서 확인할 수 있도록,
GET /dashboard/today의 핵심 부분(summary_counts, priority_tasks,
approval_count, worker_response_count)을 먼저 구현합니다. upcoming7Days
(Worker 만료 요약), recommendations(Agent 준비 내용), Notification 도메인은
후속 PR로 분리해 프론트가 최대한 빨리 연결할 수 있게 했습니다.

완료된 범위

  • TaskRepository 확장: findOpenTasks, countByCompanyIdAndStatus,
    countOpenTasksDueOn (열린 Task 기준, COMPLETED/CANCELLED 제외)
  • DashboardTodayResponse, DashboardSummaryCountsResponse,
    DashboardTaskSummaryResponse DTO
  • DashboardQueryService, DashboardController
  • GET /dashboard/today: date, timezone 쿼리 파라미터 지원

결정 사항

  • due_today는 "열린 Task 중 오늘 마감"만 셉니다. 상태 무관하게 세면 프론트의
    기존 로직(isOpenTask 필터 후 daysUntil==0)과 숫자가 어긋날 수 있어,
    전용 쿼리(countOpenTasksDueOn)로 분리했습니다.
  • 잘못된 timezone 값(ZoneId.of() 실패)은 500이 아니라 400(DashboardErrorCode.
    INVALID_TIMEZONE)으로 응답합니다.
  • 기존 idx_task_company_status_due(company_id, status, due_date) 인덱스가
    새 쿼리들과 잘 맞아 별도 인덱스 추가는 하지 않았습니다.

후속 PR 예정

  • upcoming7Days: Worker의 stay_expiry_date/employment_permit_end_date/
  • employment_activity_end_date([Worker][P0] E-9 업무용 4개 날짜·비자정보 확장 #84) 기반 7일 이내 만료 요약
  • recommendations: AI_CANDIDATE 소스 Task 기반 Agent 준비 내용
  • Notification 도메인: GET /notifications, POST /notifications/{id}/read
  • 만료일 체크 @scheduled 배치

어떻게 검증했나요?

  • ./gradlew clean test - 전체 통과
  • emptyCompanyReturnsZeroCountsNotError - 빈 사업장 0/빈 목록
  • countsMatchActualTaskStatuses - summary_counts 실제 값과 API 흐름
    (체크리스트 완료 → approval-requests) 전체로 검증
  • otherCompanyDataIsNotVisible - 타 사업장 격리
  • viewerCanAccessDashboard - VIEWER 권한
  • dateParameterOverridesServerToday, timezoneParameterIsAccepted,
    invalidTimezoneReturnsClientError - 날짜/타임존 파라미터 및 오류 처리

참조

이슈: (#15)

@hywznn

hywznn commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

timezone을 보내지 않으면 서버의 Clock을 그대로 사용합니다. 그런데 CommonBeanConfig.java에서 서버 시간은 UTC로 설정되어 있어요
따라서 한국 시간 기준 자정부터 오전 9시 사이에는:
실제 한국 날짜: 8월 8일
서버가 계산하는 날짜: 8월 7일
결과: 8월 8일 마감 업무가 due_today에 표시되지 않음
현재 테스트도 timezone=Asia/Seoul 요청이 200인지만 확인하고 있어 이 문제를 발견하지 못할 것 같습니다
수정 방법은 timezone 생략 시 기본값을 Asia/Seoul로 지정하고 근데 이건 다른 애들도 같이 통일 되어야할 것 같네요

고민되긴하지만 한 번 바꿔보셔도 될 것 같ㅇ아요

@chaeliki
chaeliki merged commit 4cd0103 into main Aug 8, 2026
4 checks passed
@chaeliki
chaeliki deleted the feat/15-dashboard-today-core branch August 8, 2026 09:56
@chaeliki

chaeliki commented Aug 8, 2026

Copy link
Copy Markdown
Contributor Author

넵 다음 PR에서 수정해서 올릴게욥!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants